/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gradius.Elementos.Naves;

import gradius.Elementos.Tipos.tipoTiro;
import gradius.Elementos.Tiros.Tiro;
import gradius.Elementos.Tiros.TiroFactory;
import gradius.InterfaceGrafica.TelaGrafica;
import java.awt.Image;
import java.util.ArrayList;
import java.util.Random;

/** Classe que define os métodos e atributos do Segundo Chefe
 *
 * @author Eduardo
 */
public class SegundoChefe extends Chefe
{
    private boolean entrou;
    private int x0,y0;
    private double t;

    /** Construtor da classe SegundoChefe
     * @param tela - Painel de desenho do jogo
     * @param imagens - Vetor onde as imagens de um determinado elemento são armazenadas
     * @param coordX - Coordenada do eixo horizontal
     * @param coordY - Coordenada do eixo vertical
     * @param tamX - Largura em pixels do elemento no eixo horizontal
     * @param tamY - Largura em pixels do elemento no eixo vertical
     */
    public SegundoChefe (TelaGrafica tela, Image[] imagens, int coordX, int coordY, int tamX, int tamY)
    {
        super(tela,imagens, coordX, coordY, tamX, tamY);
        this.setIncrX(-8);
        this.setIncrY(0);
        this.setVidaNave(200);
        this.setTipoTiro1(tipoTiro.QUADRADINHO);
        entrou = false;
        x0=y0=0;
        t=0;
    }

    /** Define o movimento do segundo chefe
     *
     */
    @Override
    public void movimenta()
    {
        if ((this.getElementoCoordenada().getCoordX() <= tela.getBounds().getWidth() - 300) && !entrou)
        {
            entrou = true;
            this.setIncrX(0);
            this.setIncrY(-8);
            x0 = this.getElementoCoordenada().getCoordX();
            y0 = this.getElementoCoordenada().getCoordY();
        }

        if (entrou)
        {
            t += 0.1;
            this.setElementoCoordenada((int) (x0 + Math.sin(t) * 100), (int) (y0 + Math.cos(t) * 200));
        }
        else
        {
            this.incrementaElementoCoordenada(this.getIncrX(), this.getIncrY());
        }
    }

    /** Método que define o padrão de tiro do segundo chefe e o faz atirar
     *
     * @param tela - Painel de desenho do jogo
     * @param tiros - ArrayList de tiros
     */
    @Override
    public void atira(TelaGrafica tela, ArrayList<Tiro> tiros)
    {
        Random rand = new Random();
        if (rand.nextInt(100)<5)
        {
            for (int i=0; i<10; ++i)
            {
                tiros.add(TiroFactory.getInstance(tela, this.getTipoTiro1(), this.getElementoCoordenada().getCoordX() + (int)(this.getElementoTamanho().getCoordX()/2), this.getElementoCoordenada().getCoordY() + (int)(this.getElementoTamanho().getCoordY()/2)));
            }
        }
    }
}
